Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Каскадное управление на базе ПЛК
Диалог специалистов АВОК > ОБЩИЙ ФОРУМ > Автоматизация систем
vlad_45
Всем привет.
Имеется 6 котлов, поддерживающих температуру в смесителе. Пишется для этого программа для ПЛК Овен на языке ST. Управляются котлы через выход 0...10 библиотечного ПИДа... Не могу написать алгоритм кодом.
Одна из идей: отслеживать время работы каждого котла и при выходе с пида более 8-ми Вольт подключать второй котел, отработавший менее всех остальных. И так же остальные котлы. При достижении температуры котлы отключаются по одному, начиная с максимально долгоработающего...
Не откажусь даже от примитивных примеров на базе 3-х объектов. может какие нибудь библиотечные блоки помогут, я пока не в курсе...
Chabol
На форуме Сегнетикс есть готовые и есть обсуждения алгоритмов каскадирования и ротации.
FBD легко читается.
По крайней мере почерпнете какие могут быть подводные камни.
vlad_45
Спасибо, гляну.
serge197a
У Овен свой хороший форум.
Вот пример с него.
(не мой, "валенка")Нажмите для просмотра прикрепленного файла
Программ в ST.
serge197a
У меня есть свой алгоритм, но в ладере, для Unitronics.
vlad_45
Цитата(serge197a @ 18.9.2013, 9:41) *
У Овен свой хороший форум.
Вот пример с него.
(не мой, "валенка")Нажмите для просмотра прикрепленного файла
Программ в ST.

немного не то... у него линия включается вручную и просто подбирается насос. Или я просто не допер как этот пример преобразовать под мой случай.

Какая ситуация у меня: 6 котлов, каждый из которых характеризуется четырьмя свойствами:
1) Подключен или нет;
2) Работает в данный момент или нет;
3) Ошибка есть или нет;
4) Время работы.
Пока что один из вариантов, который у меня в голове - это записать все эти состояния в массив 4 на 6 и, каким то образом, искать в массиве котел с параметрами: 1, 0, 0, мин. время (см. свойства выше)...
Для определения минимального времени есть такая мини прога, которая может подойти (см. вложение)
serge197a
Скачайте ладер для ОПЛК JAZZ Unitronics.
Он бесплатный. Я сброшу кусок программы для 3-х ступенчатого нагревателя.
Посмотрите алгоритм.
У овена я такое не писал, не было нужды.
у валенка показан принцип выбора, а условие можете ставить, как угодно.
В моей программе условия выбора по наработке то же нет.
Это сами дописывайте.
Я бы построил структуру(номер котла, наработка, состояние) и перемещал в нем очередь котлов по наработке, со сдвигом, после выключения.
vlad_45
Скачал какой-то, U90, давайте попробуем открыть

Цитата
Я бы построил структуру(номер котла, наработка, состояние) и перемещал в нем очередь котлов по наработке, со сдвигом, после выключения.

Так как я новичок в программировании, для меня это не совсем понятно)
serge197a
программу посмотрел, у меня несколько другой подход.
для наработки использовал бы RTC для каждого котла. Так- как математика со временем иногда приводит к неожиданным результатам.
Ну и по выключению, заносил-бы в массив значения.
Только боюсь, что при круглосуточной работе первый котел будет молотить постоянно.
Может лучше ротацию еще по каким условиям делать.
Но лучше, чтоб это делал оператор при обслуживании.
vlad_45
Цитата(serge197a @ 18.9.2013, 14:32) *
программу посмотрел, у меня несколько другой подход.
для наработки использовал бы RTC для каждого котла. Так- как математика со временем иногда приводит к неожиданным результатам.
Ну и по выключению, заносил-бы в массив значения.
Только боюсь, что при круглосуточной работе первый котел будет молотить постоянно.
Может лучше ротацию еще по каким условиям делать.
Но лучше, чтоб это делал оператор при обслуживании.

оператора нет, котельная частного дома.

В приложении - используемый код для подсчета времени наработки
serge197a
Цитата(vlad_45 @ 18.9.2013, 12:36) *
оператора нет, котельная частного дома.

кто-то ведь будет обслуживать.
Приходить и проверять раз в месяц или как-то еще..http://forum.abok.ru/uploads/style_images/1/folder_attach_images/attach_add.png

так время считать не будет.
берите функцию RTC. припуске загружайте на вход время остановаиз ретайн переменной.
При стопе записывайте время на выходе из функции в ретайн переменную.
vlad_45
Цитата(serge197a @ 18.9.2013, 14:49) *
кто-то ведь будет обслуживать.
Приходить и проверять раз в месяц или как-то еще..http://forum.abok.ru/uploads/style_images/1/folder_attach_images/attach_add.png

так время считать не будет.
берите функцию RTC. припуске загружайте на вход время остановаиз ретайн переменной.
При стопе записывайте время на выходе из функции в ретайн переменную.

При эмуляции счет времени идет в переменной Текущего времени, после остановки котла - текущее время прибавляется к общему времени.
Ну про ретэйн тоже почитаю
serge197a
так считать время не будет.
При пуске загружайтезначение из ретайн переменной на вход функции RTC
При Стоп записывайте значение на выходе функции в ретайн переменную.
beastmaster
Реализовал такой алгоритм для до 6 котлов максимум в SmLogix (Segnetics). Работает следующим образом:
1) Определяется, сколько котлов в данный момент нужно - на основании выходной мощности регулятора. Если 100%, то все котлы, если 50%, то половина и т.д. По мере изменения выходной мощности, меняется и число работающих котлов.
2) Выполняется сравнение количества работающих в данный момент котлов с их необходимым количеством.
3) Далее на основании информации о готовности котлов, состоянии (работает/не работает), времени наработки, выбирается котел, который будет включаться/отключаться в данный момент. Включаться будет котел с наименьшей наработкой.
4) После формирования команды на запуск котла делается выдержка для получения обратной связи с котла, что котел успешно включился. Если котел не запустился, то процесс выбора повторяется снова - из тех котлов, что не находятся в работе или в аварии.
В общих чертах как-то так...
vlad_45
Цитата(beastmaster @ 18.9.2013, 14:55) *
Реализовал такой алгоритм для до 6 котлов максимум в SmLogix (Segnetics). Работает следующим образом:
1) Определяется, сколько котлов в данный момент нужно - на основании выходной мощности регулятора. Если 100%, то все котлы, если 50%, то половина и т.д. По мере изменения выходной мощности, меняется и число работающих котлов.
2) Выполняется сравнение количества работающих в данный момент котлов с их необходимым количеством.
3) Далее на основании информации о готовности котлов, состоянии (работает/не работает), времени наработки, выбирается котел, который будет включаться/отключаться в данный момент. Включаться будет котел с наименьшей наработкой.
4) После формирования команды на запуск котла делается выдержка для получения обратной связи с котла, что котел успешно включился. Если котел не запустился, то процесс выбора повторяется снова - из тех котлов, что не находятся в работе или в аварии.
В общих чертах как-то так...

Именно так у меня и должно быть. Можно взглянуть на этот проект?
serge197a
Вам, чтоб работало нужно включать по минимальной наработке, а выключать по максимальной.
Поиск включаемого- выключаемого в структуре легко организуется в цикле FOR.
(см. пример Валенка)
Время наработки, состояние (авария) и состояние (работа) заносите в структуру и по команде от ПИД, + аварийные значения+ задержки производить выбор.
Включать лучше поочередно, через 1-2 минуту, а не по значению ПИД 100% сразу все.
Иначе при будет вылетать в перегрев.
ktulu
"Реализовал такой алгоритм для до 6 котлов максимум в SmLogix (Segnetics). Работает следующим образом:
1) Определяется, сколько котлов в данный момент нужно - на основании выходной мощности регулятора. Если 100%, то все котлы, если 50%, то половина и т.д. По мере изменения выходной мощности, меняется и число работающих котлов.

...подход в корне не верный, надо брать не выходное значение регулятора, а дельту D значения этого регулятора за какое-то время, D>Dуст для включения - запускаем мин по наработке(общей? за сутки?) котел, D<Dуст для отключ - останавливаем макс по наработке (общей? за сутки?) котел, типа серво-функции...

2) Выполняется сравнение количества работающих в данный момент котлов с их необходимым количеством.

...при таком алгоритме это не надо, регулятор сам определит нужное количество для поддержания уставки...
vlad_45
В данный момент задача немного изменилась. Вместо ПИДа в котел загоняется Туст, а мощность котел сам подбирает, в зависимости от разности Ттек и Туст. Остается задача выбора котла для подключения и отключения. И, к примеру, при разнице Туст-Ттек 5-10 градусов - включаем один котел, 10-20 градусов - два, и т.д. Так конечно чуть проще, но вся предыдущая наработка у меня не годится...(( Сортировку по времени наработки реализовал пока в цикле case, в котором мы по порядку проходим по массиву с временами наработки. Думаю если в каждый шаг этого перебора внедрить условия наличия котла и вкл/выкл, то получится нечто подобное с предложенными структурами. Если не получится, буду пробовать структуру.
vlad_45
Цитата(serge197a @ 18.9.2013, 16:34) *
Вам, чтоб работало нужно включать по минимальной наработке, а выключать по максимальной.
Поиск включаемого- выключаемого в структуре легко организуется в цикле FOR.
(см. пример Валенка)
Время наработки, состояние (авария) и состояние (работа) заносите в структуру и по команде от ПИД, + аварийные значения+ задержки производить выбор.
Включать лучше поочередно, через 1-2 минуту, а не по значению ПИД 100% сразу все.
Иначе при будет вылетать в перегрев.

Вот логику то я понял... Только теперь вместо команды ПИДа у меня Результат сравнения уставки и подачи - попадание в определенный диапазон. От этого определяем количество необходимых котлов. Только вот реализовать у меня это не получается.
Допустим Выбор котлов по наработке у меня работает, допустим я использую алгоритм Валенка для отсеивания включенных или выведенных котлов... А вот как подключить еще один котел используя цикл для выбора или вывести котел с макс наработкой, если мы попали в другой диапазон, это я уже не могу понять как сделать.
beastmaster
А когда Туст=Ттек не работает ни одного котла? Или я что-то не понял? Вы можете с того же ПИДа давать котлу задание в виде температуры, пропорционально заданию ПИДа для данного котла. Например, у Вас два котла, температура котлов может меняться в диапазоне 65-95 градусов, задание ПИД 50%, следовательно работает 1 котел на 95 градусов, задание ПИД 75%, тогда первый котел работает на 95 градусов, а второй на 65+(95-65)/2=80 градусов.
vlad_45
Действительно, когда Туст=Ттек, то котлы выключаются (либо работает один котел на минимуме, это пока не принципиально). Пока не будем усложнять ПИДами, мне вышепредложенный вариант все равно не реализовать так просто. Я вот не могу пока реализовать включение необходимого кол-ва котлов при попадании в определенный диапазон разности уставки и подачи.

Прикрепил часть кода, над которой работаю, чтоб нагляднее было. Там пока много лишнего, на которое не стоит обращать внимания...
beastmaster
Если у вас достигнута уставка температуры, то это не значит, что для её поддержания не нужны котлы. То есть тепло, забираемое системой отопления, и тепло, вырабатываемое котлами, в данной точке уравновешены. Поэтому я не представляю, как можно с помощью такого регулирования по рассогласованию, когда достижение уставки означает отключение котлов, поддерживать нужную температуру. При одинаковой уставке, но при разной наружной температуре, в работе могут находиться разное количество котлов, т.к. потребление тепла системой тоже будет разным. Я бы на Вашем месте не занимался "изобретением велосипеда", а применил бы уже готовое решение для управления каскадом котлов на базе того же Siemens RMK770-4. Как раз возможность управления до 6 котлов там есть, причем с совершенно любыми горелками. А вашему контроллеру оставил бы вспомогательные функции например по управлению группами насосов, ГВС и т.д.
vlad_45
Управление контурами отопления уже реализовано на этом же контроллере. Плюсом это не моя идея реализовать управление котлами, а задача организации... И в частности моя задача - написать программу для управления. Предлагаю пока условиться, что котлы отключаются при перегреве на 5 градусов, позже я думаю это можно поправить на другое действие. Пока для меня главная задача - подключать и отключать котлы при разных температурах
beastmaster
Тогда лучше почитайте документацию на этот контроллер, там есть описания алгоритмов его работы. Может, это прояснит Вам ситуацию, и поможет написать программу.
vlad_45
Обязательно ознакомлюсь после реализации включения/выключения котлов
Usach
получается, что Вы котлы коммутируете, как равные по мощности ступени нагревателя?
посмотрите у Овена - там куча контроллеров для электрических печек и сушилок на этом принципе работающих...
vlad_45
Цитата(Usach @ 23.9.2013, 13:21) *
получается, что Вы котлы коммутируете, как равные по мощности ступени нагревателя?
посмотрите у Овена - там куча контроллеров для электрических печек и сушилок на этом принципе работающих...

Да, только эти котлы имеют еще и аналоговое регулирование... И контроллеры температуры не рассматриваются, так как программа пишется своя для ПЛК, как раз таки ОВЕН. На данной стадии, правда, мы этот аналоговый вход используем для задания температуры котла, мощность он сам подбирать будет.
tiptop
Цитата(Usach @ 23.9.2013, 11:21) *
получается, что Вы котлы коммутируете, как равные по мощности ступени нагревателя?
посмотрите у Овена - там куча контроллеров для электрических печек и сушилок на этом принципе работающих...

Например?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.